#####一些网址#####
#https://console.xfyun.cn/services/cbm
#https://blog.csdn.net/qq_45156060/article/details/134072123


import SparkApi

#以下密钥信息从控制台获取
'''
appid = "5f848a43"     #填写控制台中获取的 APPID 信息
api_secret = "NmM1OWE3ODBiOTg2ODVhZDBhM2M0MDQw"   #填写控制台中获取的 APISecret 信息
api_key ="c2b3d41619703c5152c82d2b8223e4cf"    #填写控制台中获取的 APIKey 信息
 
domain = "general"   # v3版本
#云端环境的服务地址
Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # v3环境的地址（"wss://spark-api.xf-yun.com/v3.1/chat）
'''

appid = "0606c526"  #填写控制台中获取的 APPID 信息
api_secret = "NGQyNmZhMzczMTk5ZDJiY2E4YmFkOWNk"  #填写控制台中获取的 APISecret 信息
api_key = "f0cfca7da96c5d1a2a0b35b4504553a6"  #填写控制台中获取的 APIKey 信息

domain = "generalv3"  # v3版本
#云端环境的服务地址
Spark_url = "ws://spark-api.xf-yun.com/v3.5/chat"  # v3环境的地址（"wss://spark-api.xf-yun.com/v3.1/chat）

text = []


# length = 0

def getText(role, content):
    jsoncon = {}
    jsoncon["role"] = role
    jsoncon["content"] = content
    text.append(jsoncon)
    return text


def getlength(text):
    length = 0
    for content in text:
        temp = content["content"]
        leng = len(temp)
        length += leng
    return length


def checklen(text):
    while (getlength(text) > 8000):
        del text[0]
    return text


def spark_api(question):
    """
    :param question:
    :return:
    """

    question = checklen(getText("user", question))
    SparkApi.answer = ""
    SparkApi.main(appid, api_key, api_secret, Spark_url, domain, question)
    text.clear()
    return SparkApi.answer


if __name__ == '__main__':
    question = '''请基于以下候选答案回答问题：对于航程大于等于24h的客船，救生服配备的要求是什么？
（注意，列表中每个候选答案的第一个元素为来源文档名称_页码_段落，第二个元素为问题与该候选答案的L2距离，第三个元素为具体的候选答案内容。请在组织答案时将相关信息也进行阐述和说明，例：由XXX文档第X页的内容可知，XXXX。）
[['SOLAS2014(中）-印刷稿qiu.pdf_Page282_Num6',
  0.8758784532546997,
  '第IV节 救生设备和装置的要求第34条 所有救生设备和装置均应符合规则的适用要求。'],
 ['SOLAS2014(中）-印刷稿qiu.pdf_Page283_Num0',
  0.9217260479927063,
  '3 培训手册可分成若干分册，应包含关于船上所配备的救生设备和最佳救生方法的须知和资料并应用易懂的措词写成，如有可能应配以图解说明。这些资料的任何部分都可以用视听辅助教材形式提供。下列各项应予详细解释：.1 救生衣、救生服和抗暴露服的穿着法（按适用者)；.2 在指定地点集合；.3 救生艇筏和救助艇的登乘、降落和离开，包括（如适用）海上撤离系统的使用；.4 在救生艇筏内降落的方法；.5 从降落设备上脱开；.6 降落区域内防护方法与防护设备的用法（如适用）；.7 降落区域的照明；.8 所有救生属具的用法；.9 所有探测装备的用法；.10 用图解说明无线电救生设备的用法；.11 海锚的用法；.12 发动机及其附件的用法；.13 救生艇筏和救助艇的回收，包括存放和系固；.14 暴露的危害性和穿用保暖衣服的必要性；.15 为救生而使用救生艇筏设备的最佳方法；.16 拯救的方法，包括直升机救助装置（吊绳、吊篮、吊担架）、连裤救生圈、海岸救生工具和船舶抛绳设备的用法；.17 应变部署表与应变须知所列出的所有其他措施；和.18 救生设备应急修理须知。'],
 ['SOLAS2014(中）-印刷稿qiu.pdf_Page274_Num6',
  0.9365288019180298,
  '4 救生服和保温用具4.1 所有客船上每艘救生艇应配备至少3件符合规则第2.3节要求的救生服，此外，还应为救生艇中没有配备救生服的每个人配备符合规则第2.5节要求的保温用具。在下列情况下，不必配备这些救生服和保温用具：.1 全封闭或部分封闭救生艇中的人员；或.2如果船舶一直在主管机关认为不需救生服和保温用具的温暖气候区域①航行。'],
 ['SOLAS2014(中）-印刷稿qiu.pdf_Page282_Num3',
  0.9401631355285645,
  '3.5 本条要求的救生服可用于符合第7.3条的要求。'],
 ['SOLAS2014(中）-印刷稿qiu.pdf_Page281_Num0',
  0.9684256315231323,
  '货船应至少配备一艘符合规则第5.1节要求的救助艇。如果救生艇及其降落和回收装置也符合对救助艇的要求，则可以接受此救生艇作为救助艇。'],
 ['SOLAS2014(中）-印刷稿qiu.pdf_Page258_Num5',
  0.9937363862991333,
  '2 救生衣2.1 应为船上每个人配备1件符合规则2.2.1或2.2.2要求的救生衣，此外还应：.1 对于航程小于24 h的客船，应配备至少船上乘客总数2.5%的婴儿救生衣；.2 对于航程24 h及以上的客船，应为船上每一个婴儿配备婴儿救生衣；.3 配备若干适合儿童穿着的救生衣，其数量至少相等于船上乘客总数的10%，或为每个儿童配备1件救生衣而可能需要的更多数量；.4 配备足够数量的救生衣，以供值班人员使用，并供设置在远处的救生艇筏站使用。供值班人员使用的救生衣应存放在驾驶室、机舱控制室和任何其他有人值班的地方；和第246页'],
 ['SOLAS2014(中）-印刷稿qiu.pdf_Page264_Num8',
  1.0040857791900635,
  '2 如救助艇是船舶救生艇筏中的一艘，其登乘装置与降落站应符合第11条和第12条的要求。'],
 ['SOLAS2014(中）-印刷稿qiu.pdf_Page274_Num1',
  1.009157657623291,
  '2 救生衣2.1 除第7.2条要求的救生衣外，每艘客船还应配备不少于船上人员总数5%的救生衣。'],
 ['SOLAS2014(中）-印刷稿qiu.pdf_Page259_Num4',
  1.0151814222335815,
  '3 救生服和抗暴露服应为每位被指派为救助艇员或海上撤离系统工作人员的人配备1件尺寸适宜且符合规则第2.3节要求的救生服或符合规则第2.4节要求的抗暴露服。如果船舶一直在主管机关认为不需热防护的温暖气候区域①航行，则不必配备该防护服。'],
 ['SOLAS2014(中）-印刷稿qiu.pdf_Page281_Num2',
  1.023712158203125,
  '该救生筏或这些救生筏应设有能与下沉中船舶自动脱开的系牢救生筏的绑扎装置或等效装置；和.2 如从船首最前端或船尾最末端至最靠近的救生艇筏最近一端的水平距离超过100 m，除配备本条3.1要求的救生筏外，还应在合理可行的范围内配备1只救生筏，尽量靠前或靠后存放，或2只救生筏，1只尽量靠前，另1只尽量靠后存放。尽管有3.1的要求，所述救生筏可用能手动脱开的方式系牢。']]'''
    res = spark_api(question)
    print(res)
